// pages/cart/cart.js
//引入购物车列表请求函数
import { reqCartList,reqChangeOneCheck,reqDeleteOne,reqChangeAllCheck,reqUpdateNum} from '../../api/index' 
Page({
  /*页面的初始数据*/
  data: {
    cartList: [],//购物车列表
    allCheck:true,//全选状态
    allPrice:0,//总价格
  },

  /*获取购物车列表数据*/
  async getCartList() {
    try { 
      const res = await reqCartList() //获取购物车列表数据
      this.setData({//更新购物车列表数据
        cartList: res.data//购物车列表数据
      })//更新购物车列表数据
      this.computedAllCheck()//计算全选状态
      this.computedAllPrice()//计算总价格

    } catch (error) {//获取购物车列表失败
    wx.showToast({//提示用户获取购物车列表失败
      title: '获取购物车列表失败',
    })
  }
},
// 单个选中状态的回调函数
changeOneCheck(e){
  let goodsId = e.target.dataset.goodsid//获取当前商品的id
  let isChecked = e.target.dataset.ischecked ? 0 : 1 //当前选中传入0，不选中传入1
  this.getChangeOneCheck(goodsId,isChecked)
},//调用单个选中状态的请求函数 
async getChangeOneCheck(goodsId,isChecked){ 
try {
  const res = await reqChangeOneCheck(goodsId,isChecked)//获取单个选中状态的请求函数
  if(res.code===200){
    this.getCartList()//获取购物车列表数据
  }
} catch (error) { //获取单个选中状态失败
  wx.showToast({ //提示用户获取单个选中状态失败
    title: '修改选中状态失败',
  })
}
},
// 点击删除执行的回调函数
deleteOne(e){
// 获取当前商品的id
let goodsId = e.target.dataset.goodsid 
wx.showModal({//提示用户是否删除
  title: '请确实',
  content: '您要删除这个商品吗？',
  success: (res) => { //用户点击确定或取消
    if (res.confirm) {//用户点击确定
      this.getDeleteOne(goodsId)//调用删除单个商品的请求函数
    }
  }
})
},
// 删除单个商品的请求函数
async getDeleteOne(goodsId){
  try {
    const res = await reqDeleteOne(goodsId)
    if(res.code===200){
   this.getCartList()
    }
  } catch (error) {
   wx.showToast({
    title:'删除单个商品失败'
   }) 
  }
},
// 计算全选状态的函数
computedAllCheck(){
  let allCheck = true //默认全选
  this.data.cartList.forEach(v=>{ //遍历购物车列表
    if(!v.isChecked){ //如果有一个商品不选中
      allCheck = false//全选状态为false
    }
  })
  this.setData({ //更新全选状态
    allCheck//全选状态
  })
},
// 计算总价格的函数
computedAllPrice(){
  let allPrice = this.data.cartList.reduce((prev,item)=>{ //遍历购物车列表
    if(item.isChecked){ //如果商品选中
      prev += item.count * item.price//计算总价格
    }
    return prev //返回总价格
  },0)//初始总价为0
  // 更改初始总价数据
  this.setData({ 
    allPrice 
  })
},
// 点击全选回调函数
changeAllCheck(){
  let flag = this.data.allCheck ? 0:1 //获取全选状态
  this.getAllCheck(flag) //调用更改全选状态的请求函数
},
// 更改全选状态的请求函数
async getAllCheck(flag){
  try {
    const res = await reqChangeAllCheck(flag) //获取更改全选状态的请求函数
    if(res.code===200){
      this.getCartList() //获取购物车列表数据
    }
  } catch (error) {
    wx.showToast({
      title: '更改全选状态失败',
    })
  }
},
// 点击加减执行的回调函数
 changeNum(e){
  let newNum = e.detail * 1 //获取新的数量
  let oldNum = e.target.dataset.count //获取旧的数量
  let goodsId = e.target.dataset.goodsid //获取商品id
  let disNum = newNum - oldNum //获取数量的差值
  if(!disNum) //如果数量没有变化
    return //不执行后面的代码
    this.getUpdateNum(goodsId,newNum) //调用更改商品数量的请求函数
  },
  // 封装更改数量的请求函数
  async getUpdateNum(goodsId,count){
    try {
      const res = await reqUpdateNum(goodsId,count) //获取更改数量的请求函数
      if(res.code === 200){
        this.getCartList()
      }
    } catch (error) {
      console.log(error)
      wx.showToast({
        title:'更改商品数量失败'
      })
    }
  }


 },
  /* 生命周期函数--监听页面加载 */
  onLoad(options) {
  },

  /* 生命周期函数--监听页面初次渲染完成*/
  onReady() {
  },
  /*生命周期函数--监听页面显示 */
  onShow() {
    // 每次进入购物车判断用户是否登录了
    if (!wx.getStorageSync('token')) {
      wx.navigateTo({
        url: '/pages/login/login',
      })
    }
    this.getCartList()//获取购物请求函数
  },

  /*生命周期函数--监听页面隐藏 */
  onHide() {
  },

  /* 生命周期函数--监听页面卸载*/
  onUnload() {
  },
  /* 页面相关事件处理函数--监听用户下拉动作 */
  onPullDownRefresh() {
  },
  /* 页面上拉触底事件的处理函数*/
  onReachBottom() {
  },
  /*用户点击右上角分享 */
  onShareAppMessage() {
  }
})